#include <iostream>

using namespace std;

template<class T1, class T2>
class Data
{
public:
    Data()
    {
        cout << "T1 T2" << endl;
    }
private:
    T1 _d1;
    T2 _d2;
};

// 全特化
template<>
class Data<int, double>
{
public:
    Data()
    {
        cout << "int double" << endl;
    }
private:
    int _d1;
    double _d2;
};

// 偏特化
template<class T1>
class Data<T1, double>
{
public:
    Data()
    {
        cout << "T1 double" << endl;
    }
private:
    T1 _d1;
    double _d2;
};

// 特殊的偏特化
template<class T1, class T2>
class Data<T1*, T2*>
{
public:
    Data()
    {
        cout << "T1* T2*" << endl;
    }
private:
    T1 _d1;
    double _d2;
};


int main()
{
    Data<int, int> d1;
    Data<int, double> d2;
    Data<double, double> d3;
    Data<int*, double*> d4;
    return 0;
}